#include <iostream>
#include <cstring>
using namespace std;
const int N=1e6+10;

int h[N],ne[N],to[N],idx;
void add(int x,int y)
{
	ne[idx]=h[x];
	to[idx]=y;
	h[x]=idx++;
}
int a[N],b[N];
int f[N];
int ou[N];
int dfs(int u)
{
	if(ou[u]==0)
	{
		f[u]=1;
		return f[u];
	}
	for(int i=h[u];~i;i=ne[i])
	{
		int j=to[i];
		f[u]+=dfs(j);
	}
	return f[u];
}
int main()
{
	memset(h,-1,sizeof(h));
	
	int n,q;
	cin>>n>>q;
	for(int i=2;i<=n;i++)
	{
		int t;
		cin>>t;
		add(t,i);
		ou[t]++;
	}

	dfs(1);
	for(int i=0;i<q;i++)
	{
		cin>>a[i];
	}
	for(int i=0;i<q;i++)
	{
		cin>>b[i];
	}
	int ret=0;
	for(int i=0;i<q;i++)
	{
//		cout<<a[i]<<' '<<b[i]<<endl;
		int t=f[a[i]]*f[b[i]];
		ret=ret^t;
	}
	cout<<ret<<endl;
	return 0;
}
